﻿/**
 * @file   FITKAbaqusAdaptorMaterialExpansion.h
 * @brief 膨胀材料
 * @author liuzhonghua (liuzhonghuaszch@163.com)
 * @date 2024-06-18
 */
#ifndef __FITKABAQUSADAPTORMATERIALEXPANSION__H__
#define __FITKABAQUSADAPTORMATERIALEXPANSION__H__

#include "FITKAbaqusAbstractAdaptor.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"

 //前置声明
ForwardDeclarNS(AbaqusData, FITKDataCase)
ForwardDeclarNS(Interface, FITKAbaMaterial)
ForwardDeclarNS(Interface, FITKAbaMaterialExpansion)

namespace IO
{
    /**
     * @brief 超弹性材料读写配置器
     * @author liuzhonghua (liuzhonghuaszch@163.com)
     * @date 2024-06-17
     */
    class FITKAbaqusAdaptorMaterialExpansion : public FITKAbaqusAbstractAdaptor
    {
    public:
        explicit FITKAbaqusAdaptorMaterialExpansion() = default;
        ~FITKAbaqusAdaptorMaterialExpansion() = default;

        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        QString getAdaptorClass() override;

        /**
         * @brief 适配器读取
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        bool adaptW() override;

    private:
        /**
         * @brief 读取类型各向同性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeIsotroplc();
        /**
         * @brief 读取类型正交
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeOrthotropic();
        /**
         * @brief 读取类型各向异性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool readTypeAnisotropic();
        /**
         * @brief 写出类型各向同性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeIsotroplc();
        /**
         * @brief 写出类型正交
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeOrthotropic();
        /**
         * @brief 写出类型各向异性
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        bool writeTypeAnisotropic();

    private:

        /**
         * @brief 材料数据
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-17
         */
        Interface::FITKAbaMaterial* _materialData{};
        /**
         * @brief 场边量个数
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-18
         */
        int _dependencies{ 0 };
    };

    Register2FITKIOAdaptorFactory(INP, Interface::FITKAbaMaterialExpansion, FITKAbaqusAdaptorMaterialExpansion)

}

#endif
